{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "device(type='cuda')"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.optim as optim\n",
    "import torchvision\n",
    "import torchvision.transforms as transforms\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import optuna\n",
    "import pandas as pd\n",
    "from torch.utils.data import DataLoader\n",
    "from tqdm import tqdm\n",
    "\n",
    "# 设备选择\n",
    "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
    "device"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "# 数据加载函数\n",
    "def get_dataloaders(batch_size):\n",
    "    train_trans = transforms.Compose(\n",
    "        [\n",
    "            # transforms.RandomHorizontalFlip(),\n",
    "            transforms.ToTensor(),\n",
    "            transforms.Normalize((0.5,), (0.5,)),\n",
    "        ]\n",
    "    )\n",
    "    test_trans = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])\n",
    "    trainset = torchvision.datasets.FashionMNIST(root='./data', train=True, download=True, transform=train_trans)\n",
    "    testset = torchvision.datasets.FashionMNIST(root='./data', train=False, download=True, transform=test_trans)\n",
    "    trainloader = DataLoader(trainset, batch_size=batch_size, shuffle=True)\n",
    "    testloader = DataLoader(testset, batch_size=batch_size, shuffle=False)\n",
    "    return trainloader, testloader"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of parameter: 0.42M\n"
     ]
    }
   ],
   "source": [
    "# CNN 模型\n",
    "class CNN(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(CNN, self).__init__()\n",
    "        self.conv1 = nn.Conv2d(1, 32, kernel_size=3, padding=1)\n",
    "        self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)\n",
    "        self.pool = nn.MaxPool2d(2, 2)\n",
    "        self.fc1 = nn.Linear(64 * 7 * 7, 128)\n",
    "        self.fc2 = nn.Linear(128, 10)\n",
    "        self.relu = nn.ReLU()\n",
    "        self.dropout = nn.Dropout(0.25)\n",
    "\n",
    "    def forward(self, x):\n",
    "        x = self.pool(self.relu(self.conv1(x)))\n",
    "        x = self.pool(self.relu(self.conv2(x)))\n",
    "        x = x.view(-1, 64 * 7 * 7)\n",
    "        x = self.relu(self.fc1(x))\n",
    "        x = self.dropout(x)\n",
    "        x = self.fc2(x)\n",
    "        return x\n",
    "    \n",
    "def count_parameters(model):\n",
    "    total = sum([param.nelement() for param in model.parameters()])\n",
    "    print(\"Number of parameter: %.2fM\" % (total / 1e6))\n",
    "    return total\n",
    "\n",
    "model_test = CNN()\n",
    "total = count_parameters(model_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "##################################################\n",
    "# 请勿修改此单元格中的代码\n",
    "##################################################\n",
    "\n",
    "# 评估指标累加器\n",
    "class Accumulator:\n",
    "    def __init__(self, n):\n",
    "        self.data = [0.0] * n\n",
    "\n",
    "    def add(self, *args):\n",
    "        self.data = [a + float(b) for a, b in zip(self.data, args)]\n",
    "\n",
    "    def reset(self):\n",
    "        self.data = [0.0] * len(self.data)\n",
    "\n",
    "    def __getitem__(self, idx):\n",
    "        return self.data[idx]\n",
    "\n",
    "# 计算准确率\n",
    "def accuracy(y_hat, y_true):\n",
    "    y_pred = y_hat.argmax(dim=1)\n",
    "    return (y_pred == y_true).float().mean().item()\n",
    "\n",
    "\n",
    "\n",
    "# 训练函数\n",
    "def train_epoch(net, train_iter, loss_fn, optimizer):\n",
    "    net.train()\n",
    "    device = next(net.parameters()).device\n",
    "    metrics = Accumulator(3)\n",
    "    for X, y in train_iter:\n",
    "        X, y = X.to(device), y.to(device)\n",
    "        optimizer.zero_grad()\n",
    "        y_hat = net(X)\n",
    "        loss = loss_fn(y_hat, y)\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "        metrics.add(loss.item() * len(y), accuracy(y_hat, y) * len(y), len(y))\n",
    "    return metrics[0] / metrics[2], metrics[1] / metrics[2]\n",
    "\n",
    "# 评估函数\n",
    "@torch.no_grad()\n",
    "def eval_model(net, test_iter, loss_fn):\n",
    "    net.eval()\n",
    "    device = next(net.parameters()).device\n",
    "    metrics = Accumulator(3)\n",
    "    for X, y in test_iter:\n",
    "        X, y = X.to(device), y.to(device)\n",
    "        y_hat = net(X)\n",
    "        loss = loss_fn(y_hat, y)\n",
    "        metrics.add(loss.item() * len(y), accuracy(y_hat, y) * len(y), len(y))\n",
    "    return metrics[0] / metrics[2], metrics[1] / metrics[2]\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 超参数搜索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[I 2025-04-06 16:39:57,243] A new study created in memory with name: no-name-29e9a3fc-79e0-4926-926b-0600d525432f\n",
      "100%|██████████| 20/20 [04:49<00:00, 14.47s/it]\n",
      "[I 2025-04-06 16:44:47,073] Trial 0 finished with value: 0.9216 and parameters: {'batch_size': 64, 'epochs': 20, 'lr': 0.008509445158837661, 'momentum': 0.8204716057322861}. Best is trial 0 with value: 0.9216.\n",
      "100%|██████████| 20/20 [04:32<00:00, 13.63s/it]\n",
      "[I 2025-04-06 16:49:19,806] Trial 1 finished with value: 0.9073 and parameters: {'batch_size': 128, 'epochs': 20, 'lr': 0.004975147177503321, 'momentum': 0.8628575222629417}. Best is trial 0 with value: 0.9216.\n",
      "100%|██████████| 20/20 [04:32<00:00, 13.63s/it]\n",
      "[I 2025-04-06 16:53:52,578] Trial 2 finished with value: 0.9129 and parameters: {'batch_size': 128, 'epochs': 20, 'lr': 0.006273930496817309, 'momentum': 0.886260341902687}. Best is trial 0 with value: 0.9216.\n",
      "100%|██████████| 20/20 [04:23<00:00, 13.20s/it]\n",
      "[I 2025-04-06 16:58:16,666] Trial 3 finished with value: 0.8982 and parameters: {'batch_size': 256, 'epochs': 20, 'lr': 0.00643230261613778, 'momentum': 0.842466331393342}. Best is trial 0 with value: 0.9216.\n",
      "100%|██████████| 20/20 [04:22<00:00, 13.14s/it]\n",
      "[I 2025-04-06 17:02:39,573] Trial 4 finished with value: 0.905 and parameters: {'batch_size': 256, 'epochs': 20, 'lr': 0.007410081260096922, 'momentum': 0.8784767735553334}. Best is trial 0 with value: 0.9216.\n",
      "100%|██████████| 20/20 [04:48<00:00, 14.43s/it]\n",
      "[I 2025-04-06 17:07:28,236] Trial 5 finished with value: 0.916 and parameters: {'batch_size': 64, 'epochs': 20, 'lr': 0.0052627438034269156, 'momentum': 0.8400252829729293}. Best is trial 0 with value: 0.9216.\n",
      "100%|██████████| 20/20 [04:48<00:00, 14.44s/it]\n",
      "[I 2025-04-06 17:12:17,098] Trial 6 finished with value: 0.9094 and parameters: {'batch_size': 64, 'epochs': 20, 'lr': 0.004288507381632116, 'momentum': 0.8236186153804896}. Best is trial 0 with value: 0.9216.\n",
      "100%|██████████| 20/20 [04:22<00:00, 13.14s/it]\n",
      "[I 2025-04-06 17:16:39,958] Trial 7 finished with value: 0.887 and parameters: {'batch_size': 256, 'epochs': 20, 'lr': 0.00200015537097047, 'momentum': 0.8935150425120524}. Best is trial 0 with value: 0.9216.\n",
      "100%|██████████| 20/20 [04:48<00:00, 14.41s/it]\n",
      "[I 2025-04-06 17:21:28,246] Trial 8 finished with value: 0.9271 and parameters: {'batch_size': 64, 'epochs': 20, 'lr': 0.009888878053436733, 'momentum': 0.8984292797407017}. Best is trial 8 with value: 0.9271.\n",
      "100%|██████████| 20/20 [04:31<00:00, 13.58s/it]\n",
      "[I 2025-04-06 17:25:59,996] Trial 9 finished with value: 0.903 and parameters: {'batch_size': 128, 'epochs': 20, 'lr': 0.005548239048623472, 'momentum': 0.8039739446278261}. Best is trial 8 with value: 0.9271.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best parameters: {'batch_size': 64, 'epochs': 20, 'lr': 0.009888878053436733, 'momentum': 0.8984292797407017}\n",
      "Best test accuracy: 0.9271\n"
     ]
    }
   ],
   "source": [
    "# Optuna 超参数优化\n",
    "def objective(trial):\n",
    "    batch_size = trial.suggest_categorical(\"batch_size\", [64, 128, 256])\n",
    "    epochs = trial.suggest_categorical(\"epochs\", [20])\n",
    "    lr = trial.suggest_float(\"lr\", 1e-4, 1e-2)\n",
    "    momentum = trial.suggest_float(\"momentum\", 0.8, 0.9)\n",
    "    \n",
    "    trainloader, testloader = get_dataloaders(batch_size)\n",
    "    model = CNN().to(device)\n",
    "    loss_fn = nn.CrossEntropyLoss()\n",
    "    optimizer = torch.optim.SGD(model.parameters(), lr=lr, momentum=momentum, nesterov=True)\n",
    "    \n",
    "    best_test_acc = 0\n",
    "    for epoch in tqdm(range(epochs)):\n",
    "        train_epoch(model, trainloader, loss_fn, optimizer)\n",
    "        _, test_acc = eval_model(model, testloader, loss_fn)\n",
    "        best_test_acc = max(best_test_acc, test_acc)\n",
    "    \n",
    "    return best_test_acc\n",
    "\n",
    "# 运行Optuna\n",
    "study = optuna.create_study(direction='maximize')\n",
    "study.optimize(objective, n_trials=10)\n",
    "\n",
    "# 保存结果到 CSV 文件\n",
    "results_df = pd.DataFrame([{**trial.params, \"test_acc\": trial.value} for trial in study.trials])\n",
    "results_df.to_csv(\"optuna_results.csv\", index=False)\n",
    "\n",
    "# 输出最佳参数和结果\n",
    "best_trial = study.best_trial\n",
    "print(f\"Best parameters: {best_trial.params}\")\n",
    "print(f\"Best test accuracy: {best_trial.value}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 使用最佳参数进行训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1: Train Loss 0.5720, Train Acc 0.7908, Test Loss 0.3917, Test Acc 0.8597\n",
      "Epoch 2: Train Loss 0.3544, Train Acc 0.8707, Test Loss 0.3253, Test Acc 0.8831\n",
      "Epoch 3: Train Loss 0.3030, Train Acc 0.8891, Test Loss 0.3013, Test Acc 0.8882\n",
      "Epoch 4: Train Loss 0.2717, Train Acc 0.9002, Test Loss 0.2720, Test Acc 0.9003\n",
      "Epoch 5: Train Loss 0.2483, Train Acc 0.9087, Test Loss 0.2538, Test Acc 0.9064\n",
      "Epoch 6: Train Loss 0.2297, Train Acc 0.9145, Test Loss 0.2522, Test Acc 0.9071\n",
      "Epoch 7: Train Loss 0.2133, Train Acc 0.9215, Test Loss 0.2423, Test Acc 0.9120\n",
      "Epoch 8: Train Loss 0.2006, Train Acc 0.9252, Test Loss 0.2340, Test Acc 0.9163\n",
      "Epoch 9: Train Loss 0.1857, Train Acc 0.9300, Test Loss 0.2292, Test Acc 0.9213\n",
      "Epoch 10: Train Loss 0.1753, Train Acc 0.9359, Test Loss 0.2292, Test Acc 0.9186\n",
      "Epoch 11: Train Loss 0.1648, Train Acc 0.9385, Test Loss 0.2239, Test Acc 0.9218\n",
      "Epoch 12: Train Loss 0.1525, Train Acc 0.9438, Test Loss 0.2233, Test Acc 0.9222\n",
      "Epoch 13: Train Loss 0.1434, Train Acc 0.9459, Test Loss 0.2398, Test Acc 0.9203\n",
      "Epoch 14: Train Loss 0.1353, Train Acc 0.9494, Test Loss 0.2463, Test Acc 0.9206\n",
      "Epoch 15: Train Loss 0.1257, Train Acc 0.9529, Test Loss 0.2233, Test Acc 0.9243\n",
      "Epoch 16: Train Loss 0.1183, Train Acc 0.9561, Test Loss 0.2308, Test Acc 0.9238\n",
      "Epoch 17: Train Loss 0.1091, Train Acc 0.9593, Test Loss 0.2454, Test Acc 0.9236\n",
      "Epoch 18: Train Loss 0.1024, Train Acc 0.9616, Test Loss 0.2578, Test Acc 0.9190\n",
      "Epoch 19: Train Loss 0.0973, Train Acc 0.9636, Test Loss 0.2354, Test Acc 0.9277\n",
      "Epoch 20: Train Loss 0.0884, Train Acc 0.9664, Test Loss 0.2650, Test Acc 0.9241\n"
     ]
    },
    {
     "data": {
      "image/png": "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OSn3x5EjR9p9P7XW12g0ig0bNgitViuUSqWYPn16mzYGBASITZs2mR3r7LNmibbk5uZ2+Nk5cuRIh22513u0v9tRW1srZsyYITw8PIStra0ICAgQL7/8cpsAPBD6pNWHH34o7O3tRXl5ebvXkEKf0MAz0OM9Y720+uPHBmK8Z6xnrLdUW1oN9lgvE0KIno7CExEREREREVHv4T3pRERERERERBLBJJ2IiIiIiIhIIpikExEREREREUkEk3QiIiIiIiIiiWCSTkRERERERCQRTNKJiIiIiIiIJIJJOhEREREREZFEMEknIiIiIiIikggm6UTU72QyGb788ktLV4OIiIj6CGM9Uc8xSScaZJYuXQqZTNbmMWvWLEtXjYiIiHoBYz3RwGZj6QoQUf+bNWsWdu3aZXZMqVRaqDZERETU2xjriQYujqQTDUJKpRJeXl5mD1dXVwAt09N27NiB2bNnw97eHsHBwfjb3/5mdv758+cxbdo02Nvbw93dHcuWLUN1dbVZmZ07d2L06NFQKpXw9vZGbGys2fMGgwE/+9nP4ODggGHDhuGrr77q20YTERENIoz1RAMXk3QiamPDhg2YP38+0tPTsXDhQjz77LPIyMgAANTU1GDmzJlwdXXFv//9b3z++ec4fPiwWWDesWMHYmJisGzZMpw/fx5fffUVhg4davY9Nm/ejGeeeQbnzp3D448/joULF+LmzZv92k4iIqLBirGeSMIEEQ0qS5YsEQqFQjg6Opo93njjDSGEEADE8uXLzc6JiIgQr7zyihBCiD/96U/C1dVVVFdXm54/cOCAkMvlQq/XCyGE0Ol04tVXX+2wDgDE+vXrTV9XV1cLAOKf//xnr7WTiIhosGKsJxrYeE860SD02GOPYceOHWbH3NzcTP+PjIw0ey4yMhJpaWkAgIyMDISHh8PR0dH0/JQpU2A0GpGVlQWZTIbCwkJMnz690zqMHTvW9H9HR0eo1WqUlJT0tElERET0I4z1RAMXk3SiQcjR0bHNlLTeYm9v36Vytra2Zl/LZDIYjca+qBIREdGgw1hPNHDxnnQiauPUqVNtvh45ciQAYOTIkUhPT0dNTY3p+aSkJMjlcoSGhsLJyQmBgYFISEjo1zoTERFR1zHWE0kXR9KJBqGGhgbo9XqzYzY2NtBoNACAzz//HBMnTsTUqVPxySefICUlBR999BEAYOHChdi0aROWLFmC1157DaWlpVixYgUWLVoErVYLAHjttdewfPlyeHp6Yvbs2aiqqkJSUhJWrFjRvw0lIiIapBjriQYuJulEg9DBgwfh7e1tdiw0NBSZmZkAWlZj/eyzz/DrX/8a3t7e+PTTTzFq1CgAgIODA7799lusXLkSkyZNgoODA+bPn4+tW7earrVkyRLU19fj3XffxW9/+1toNBo89dRT/ddAIiKiQY6xnmjgkgkhhKUrQUTSIZPJsG/fPsybN8/SVSEiIqI+wFhPJG28J52IiIiIiIhIIpikExEREREREUkEp7sTERERERERSQRH0omIiIiIiIgkgkk6ERERERERkUQwSSciIiIiIiKSCCbpRERERERERBLBJJ2IiIiIiIhIIpikExEREREREUkEk3QiIiIiIiIiiWCSTkRERERERCQR/x93rh7Dh3elBwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1200x400 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 使用最佳参数进行训练\n",
    "def train_best_model(batch_size=128, epochs=20, lr=0.001, momentum=0.8):\n",
    "    trainloader, testloader = get_dataloaders(batch_size)\n",
    "    model = CNN().to(device)\n",
    "    loss_fn = nn.CrossEntropyLoss()\n",
    "    optimizer = torch.optim.SGD(model.parameters(), lr=lr, momentum=momentum, nesterov=True)\n",
    "\n",
    "    train_losses, test_losses, train_accs, test_accs = [], [], [], []\n",
    "    for epoch in range(epochs):\n",
    "        train_loss, train_acc = train_epoch(model, trainloader, loss_fn, optimizer)\n",
    "        test_loss, test_acc = eval_model(model, testloader, loss_fn)\n",
    "        train_losses.append(train_loss)\n",
    "        test_losses.append(test_loss)\n",
    "        train_accs.append(train_acc)\n",
    "        test_accs.append(test_acc)\n",
    "        print(f\"Epoch {epoch+1}: Train Loss {train_loss:.4f}, Train Acc {train_acc:.4f}, Test Loss {test_loss:.4f}, Test Acc {test_acc:.4f}\")\n",
    "    return train_losses, test_losses, train_accs, test_accs\n",
    "\n",
    "# 绘制学习曲线\n",
    "def plot_learning_curves(train_losses, test_losses, train_accs, test_accs):\n",
    "    fig, axs = plt.subplots(1, 2, figsize=(12, 4))\n",
    "    axs[0].plot(train_losses, label='Train Loss')\n",
    "    axs[0].plot(test_losses, label='Test Loss')\n",
    "    axs[0].set_xlabel('Epoch')\n",
    "    axs[0].set_ylabel('Loss')\n",
    "    axs[0].legend()\n",
    "    axs[1].plot(train_accs, label='Train Accuracy')\n",
    "    axs[1].plot(test_accs, label='Test Accuracy')\n",
    "    axs[1].axhline(y=0.9, color='b', linestyle='--')  # 添加 y=0.9 的参考线\n",
    "    axs[1].set_xlabel('Epoch')\n",
    "    axs[1].set_ylabel('Accuracy')\n",
    "    axs[1].legend()\n",
    "    plt.show()\n",
    "\n",
    "# 训练最终模型\n",
    "train_losses, test_losses, train_accs, test_accs = train_best_model(batch_size=best_trial.params['batch_size'], epochs=best_trial.params['epochs'], lr=best_trial.params['lr'], momentum=best_trial.params['momentum'])\n",
    "plot_learning_curves(train_losses, test_losses, train_accs, test_accs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best test accuaracy:  0.9277\n"
     ]
    }
   ],
   "source": [
    "print(\"Best test accuaracy: \", max(test_accs))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
